package sistema;

import comandos.IGestorComandos;
import entidades.Cor;
import entidades.Decorador;
import entidades.Estilo;
import entidades.Familia;
import entidades.Telha;
import entidades.TelhaBase;
import entidades.Textura;
import entidades.TipoTelha;
import entidades.util.Grelha;
import estratégia.IMoverEstrategia;
import java.util.List;
import java.util.Map;
import javafx.beans.property.ObjectProperty;
import javafx.collections.ObservableMap;
import maquinaestados.Estado;
import sistema.util.KeyTelha;

/**
 * Trabalho DAS - 2014/2015
 * @author a21210380, a21190325, a21210392
 */
public interface ISistema {
    public IGestorComandos getGestorComandos();
    
    public boolean nomeDaFamiliaDisponivel(String nome);
    public boolean addFamilia(Familia familia);
    public boolean editFamilia(Familia newFamilia, Familia oldFamilia);
    public boolean removeFamilia(Familia familia);
    public Familia getFamilia(String nome);
    public Map<String, Familia> getFamilias();
    
    public boolean nomeDoEstiloDisponivel(String nome);
    public boolean addEstilo(Estilo estilo);
    public Estilo addEstiloDeFamilia(Familia familia);
    public Estilo addEstiloDeTelha(TelhaBase telha);
    public boolean editEstilo(Estilo newEstilo,Estilo oldEstilo);
    public boolean removeEstilo(Estilo estilo);
    public Estilo getEstilo(String nome);
    public Map<String, Estilo> getEstilos();
    public List<Estilo> getTodosEstilosDaFamilia(Familia familia); 
    
    public boolean addTelha(TelhaBase telha);
    public boolean removeTelha(TelhaBase telha);
    public TelhaBase getTelha(float x, float y);
    public boolean decorarTelha(Decorador decorador);
    public boolean removerDecoracaoDaTelha(Decorador decorador);
    public ObservableMap<KeyTelha, TelhaBase> getTelhas();
    
    public TipoTelha getTipoDeTelha(String nome);
    
    public Cor getCor(double r, double g, double b, double o);
    
    public Textura getTextura(int z, String caminho);
    
    public void drag(float x, float y, boolean fim);
    public void click(float x, float y, boolean ctr);
    
    public ObjectProperty<Estado> estadoProperty();
    
    public void guardarFicheiro();
    
    public Grelha getGrelha();
    
    public IMoverEstrategia getMoverEstrategia();
    public void setMoverEstrategia(IMoverEstrategia moverEstrategia);

    

    
}